// 国际化配置
import 'dart:convert';

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';

class TextLocalization {
  final Locale locale;

  TextLocalization(this.locale);

  static TextLocalization of(BuildContext context) {
    return Localizations.of(context, TextLocalization);
  }

  // 第一阶段，直接在代码中写死国际化语言
  /*static Map<String, Map<String, String>> _localizeValues = {
    'en': {
      'title': 'home',
      'hello': 'hello world!',
      'pickTime': 'Pick a Time~',
    },
    'zh': {
      'title': '首页',
      'hello': '您好,世界',
      'pickTime': '选择一个时间',
    }
  };*/

  // 第二阶段，使用json配置
  static Map<String, Map<String, String>> _localizeValues = {};

  Future loadJson() async {
    final jsonString = await rootBundle.loadString("assets/json/i18n.json");
    Map<String, dynamic> jsonMap = json.decode(jsonString);
    // json解析返回的value为dynamic类型不能直接赋值给Map<String,String>
    // 所以要进行一步转换，不能使用dynamic as Map<String,String>,as针对object，可以使用cast方法转换
    _localizeValues = jsonMap.map((key, value) {
      return MapEntry(key, value.cast<String, String>());
    });
  }

  // 如下所有的文本都需要提供对应的getter方法，而且key不能出错
  // 最优方案是将所有国家化文本抽取到arb文件中，dart、arb文件可以互相转换
  String get title {
    return _localizeValues[locale.languageCode]['title'];
  }

  String get hello => _localizeValues[locale.languageCode]['hello'];

  String get pickTime => _localizeValues[locale.languageCode]['pickTime'];
}
